package xyz.erupt.flow.bean.entity.form;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonNode;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * @author PP
 * @version 1.0
 * @project Erupt
 * @description 自定义类型转换
 * @date 2024/9/20 09:45:33
 */
public class OptionDeserializer extends JsonDeserializer<List<Object>> {

    @Override
    public List<Object> deserialize(JsonParser p, DeserializationContext ctxt)
            throws IOException, JsonProcessingException {
        List<Object> options = new ArrayList<>();
        JsonNode node = p.getCodec().readTree(p);

        if (node.isArray()) {
            for (JsonNode optionNode : node) {
                if (optionNode.isTextual()) {
                    // 如果是字符串，则添加到 options 列表
                    options.add(optionNode.asText());
                } else if (optionNode.isObject()) {
                    // 如果是对象，则将其反序列化为 Option 对象
                    Option option = p.getCodec().treeToValue(optionNode, Option.class);
                    options.add(option);
                }
            }
        }
        return options;
    }
}
